//
//  TestExtension.swift
//  CooperSwift_Example
//
//  Created by 计海峰 on 2021/9/30.
//  Copyright © 2021 CocoaPods. All rights reserved.
//
//
//import Foundation
//import RxSwift
//import HandyJSON
//import CooperSwift
//
//public enum ShowToastType {
//    case all, error, none
//}
//
//public protocol ResultProtocol: HandyJSON {
//    func toastMsg(_ tag: String?) -> String!
//    func isSuccess() -> Bool
//    // step 1
//    func run(_ tag: String?) -> Void
//    // step2
//    func showToast(_ type: ShowToastType, tag: String?)
//    // step3
//    func result_data() -> Any?
//}
//
//public extension ResultProtocol {
//
//    func toastMsg(_ tag: String?) -> String! {
//        return ""
//    }
//
//    func showToast(_ type: ShowToastType, tag: String?) {
//        guard let hint = self.toastMsg(tag), hint.count > 0 else { return }
//        UIWindow.keyWindow {
//            $0.makeToast(hint, position: .center)
//        }
//    }
//
//    func result_data() -> Any? {
//        return nil
//    }
//
//}

//public extension Observable where Element : Any {
//    
//    /// 普通 Json 转 Model
//    func mapHandyResultModel <T : ResultProtocol> (type : T.Type, toast: ShowToastType = .none, tag: String? = nil) -> Observable<Any?> {
//        return self.map { (element) -> Any? in
//            /// 这里的data 是 String 或者 dic
//            let data = element
//            
//            let parsedElement : T?
//            if let string = data as? String {
//                parsedElement = T.deserialize(from: string)
//            } else if let dictionary = data as? Dictionary<String , Any> {
//                parsedElement = T.deserialize(from: dictionary)
//            } else if let dictionary = data as? [String : Any] {
//                parsedElement = T.deserialize(from: dictionary)
//            } else {
//                parsedElement = nil
//            }
//            if let result = parsedElement {
//                result.run(tag)
//                if toast != .none {
//                    result.showToast(toast, tag: tag)
//                }
//            }
//            return parsedElement?.result_data()
//        }
//    }
//    
//}
//
